/*****************************************************************
                  jQuery Validate扩展验证方法  (linjq)       
*****************************************************************/
$(function(){

	/**
	 * 重写validate中的required方法
	 */
	$.extend( $.validator.methods, {
		required: function( value, element, param ) {
			// Check if dependency is met
			if ( !this.depend( param, element ) ) {
				return "dependency-mismatch";
			}
			if ( element.nodeName.toLowerCase() === "select" ) {

				// Could be an array for select-multiple or a string, both are fine this way
				var val = $( element ).val();
				return val && val.length > 0;
			}
			if ( this.checkable( element ) ) {
				return this.getLength( value, element ) > 0;
			}
			return $.trim(value).length > 0 ;
		}
	});
    // 判断整数value是否大于0
    jQuery.validator.addMethod("isIntGtZero", function(value, element) { 
         value=parseInt(value);      
         return this.optional(element) || value>0;       
    }, "整数必须大于0"); 
    // 	验证密码
    jQuery.validator.addMethod("sPassword", function(value, element) { 
    	var reg = /^.*(?=.{8,16})(?=.*\d)(?=.*[a-zA-Z]{1,})(?=.*[!@#$%^&*?\(\)]).*$/;
        return this.optional(element) || reg.test(value);       
    }, "密码只能输入8-16位，至少包含一个数字、一个字母、一个特殊字符"); 
    
    // 判断数值类型，包括整数和浮点数
    jQuery.validator.addMethod("isNumber", function(value, element) {       
         return this.optional(element) || /^[-\+]?\d+$/.test(value) || /^[-\+]?\d+(\.\d+)?$/.test(value);       
    }, "匹配数值类型，包括整数和浮点数");  
 
    /** 自定义函数的验证 add by weicb
     * @author ex-weicb
     * @param func，自定义校验函数，校验通过返回true，校验不通过返回false
     * @param optional，可选参数，是否是表单控件的值不为空的时候才触发校验，false代表是，true代表否，默认为是
     * 使用示例：
	 * rules:{
	 *		element: {
	 *		    validateByFunc: {func:function(value,element){
	 *		    			if(validatePass){//to implements some rules for yourself.
	 *		    				return true;
	 *		    			}
	 *		    			return false;
	 *				}[,optional:true]
	 *			}
	 *		}
	 *	}
     * 一般用于特别个性化的只针对一个业务的非通用校验
     */
    jQuery.validator.addMethod("validateByFunc", function(value, element,params) { 
    	if(!params.func){//自定义校验函数没有定义
    		return false;
    	}
    	//params.optional：是否是表单控件的不为空的时候才触发校验，false代表是，true代表否
    	//默认不为空的时候才触发校验
    	if(!params.optional){
    		return this.optional(element) || params.func(value,element);
    	}
    	return params.func(value,element);
		
    }, "不满足条件！"); 
    /**
     * 公共校验方法 不能等于
     * @author weicb
     */
    jQuery.validator.addMethod("notEquals", function(value, element,params) { 
    	return this.optional(element) || value!=params[0];
		
    }, "输入的值不能等于{0}！"); 
    /**
     * 公共校验方法 不能等于某个元素的值
     * @author weicb
     */
    jQuery.validator.addMethod("notEquals2Element", function(value, element,params) { 
    	return this.optional(element) || value!=$("#"+params[0]).val();
		
    }, "输入的值不能等于{0}元素的值！");
    jQuery.validator.addMethod("isFloatGtZero", function(value, element) { 
        value=parseFloat(value);      
        return this.optional(element) || value>0;       
   }, "小数必须大于0"); 
    // 整数
    jQuery.validator.addMethod("isInt", function(value, element) { 
         var reg = /(^[0-9]\d*$)/;
         var value = $.trim(value);
         var flag=true;
         if (reg.exec(value) == null) {
             flag=false;
         }
         return this.optional(element) || flag;       
    }, "必须为整数"); 
    // 正整数
    jQuery.validator.addMethod("isPositiveNum", function(value, element) { 
    	value = value * 1;
    	var reg = /^[1-9]\d*$/;
    	var flag = true;
    	if (reg.exec(value) == null) {
    		flag = false;
    	}
    	return this.optional(element) || flag;       
    }, "必须为正整数"); 
    // 整数
    jQuery.validator.addMethod("isNoNegaNum", function(value, element) { 
    	var reg = /^(\d+)(\.\d+)?/;
    	var flag=true;
	    if (reg.exec(value) == null) {
	        flag=false;
	    }
    	return this.optional(element) || flag;       
    }, "必须为非负数"); 
    // 正整数
    jQuery.validator.addMethod("isNum", function(value, element) { 
    	 //var reg = /^\d+$/;
    	var reg = /^(-?\d+)(\.\d+)?/;
        value = $.trim(value.replace(/,/g, ""));
        var preRaseAmtNum = new Number(value);
        var flag=true;
        if (reg.exec(preRaseAmtNum) == null) {
            flag=false;
        }
    	return this.optional(element) || flag;       
    }, "必须为数字"); 
    //字符超长：一个汉字相当两个字符处理
    jQuery.validator.addMethod("maxlength4Byte", function(value, element,param) { 
   	 //var reg = /^\d+$/;
       var flag=true;
       value=value.replace(/ /ig,'a');//空格不需要处理为两个
       var length=value.replace(/[^x00-xff]/ig,'aa').length;
       if (length>param) {
    	   flag=false;
       }
   	return flag;
   }, "您输入的文本不能大于{0}个字符（一个汉字代表两个字符）"); 
    /**
     * 格式化数字number(15,2)形式的校验
     * @param value
     * @returns {Boolean}
     */
    jQuery.validator.addMethod("fmtNum152", function(value, element,param) { 
    	//var reg = /^\d+$/;
    	var flag=true;
    	if(value){
    		var preRaseAmt = value.replace(/,/g, "");
    		var preRaseAmtNum = new Number(preRaseAmt);
    		if (checkStrIsNum(preRaseAmtNum)) {
    			var amtArrs = preRaseAmt.split(".");
    			var regInt = new RegExp("^[0-9]{0,13}$");
    			var regDec = new RegExp("^([0-9]{0,2})?$");
    			if (!amtArrs[0].match(regInt) || (amtArrs[1] != null && !amtArrs[1].match(regDec))) {
    				flag=false;
    			} else {
    				flag=true;
    			}
    		}
    	}
    	return this.optional(element) || flag;
    }, "长度最多13位整数加2位小数"); 
    /**
     * 格式化数字number(13,8)形式的校验
     * @param id 文本框的id
     * promptInf  提示信息
     * @returns {Boolean}
     */
    jQuery.validator.addMethod("fmtNumerical138", function(value, element,param) { 
    	//var reg = /^\d+$/;
    	var flag=true;
    	if(value){
    		var preRaseAmt = value.replace(/,/g, "");
    		var preRaseAmtNum = new Number(preRaseAmt);
    		if (checkStrIsNum(preRaseAmtNum)) {
    			var amtArrs = preRaseAmt.split(".");
    	        var regInt = new RegExp("^[0-9]{0,5}$");
    	        var regDec = new RegExp("^([0-9]{0,8})?$");
    			if (!amtArrs[0].match(regInt) || (amtArrs[1] != null && !amtArrs[1].match(regDec))) {
    				flag=false;
    			} else {
    				flag=true;
    			}
    		}
    	}
    	return this.optional(element) || flag;
    }, "长度最多5位整数加8位小数");
    /**
     * 格式化数字number(13,6)形式的校验
     * @param id 文本框的id
     * promptInf  提示信息
     * @returns {Boolean}
     */
    jQuery.validator.addMethod("fmtNumerical136", function(value, element,param) { 
    	//var reg = /^\d+$/;
    	var flag=true;
    	if(value){
    		var preRaseAmt = value.replace(/,/g, "");
    		var preRaseAmtNum = new Number(preRaseAmt);
    		if (checkStrIsNum(preRaseAmtNum)) {
    			var amtArrs = preRaseAmt.split(".");
    			var regInt = new RegExp("^[0-9]{0,7}$");
    			var regDec = new RegExp("^([0-9]{0,6})?$");
    			if (!amtArrs[0].match(regInt) || (amtArrs[1] != null && !amtArrs[1].match(regDec))) {
    				flag=false;
    			} else {
    				flag=true;
    			}
    		}
    	}
    	return this.optional(element) || flag;
    }, "长度最多7位整数加6位小数");
    /**
     * 格式化数字number(6)形式的校验
     * @param id 文本框的id
     * promptInf  提示信息
     * @returns {Boolean}
     */
    jQuery.validator.addMethod("fmtNum6", function(value, element,param) { 
    	//var reg = /^\d+$/;
    	var flag=true;
    	if(value){
    		var preRaseAmt = value.replace(/,/g, "");
    		var preRaseAmtNum = new Number(preRaseAmt);
    		if (checkStrIsNum(preRaseAmtNum)) {
    	        var regInt = new RegExp("^[0-9]{0,6}$");
    			if (!preRaseAmt.match(regInt)) {
    				flag=false;
    			} else {
    				flag=true;
    			}
    		}
    	}
    	return this.optional(element) || flag;
    }, "整数长度最多6位"); 
    
    /**
     * 富文本编辑器非空校验，IE删除完内容后，还保留p、br标签
     */
    jQuery.validator.addMethod("kindEditorRequire", function(value, element, params) {
    	//去除<p> <br> 空白字符
    	if (value) value = value.replace(/<(\/*)p>/g, "").replace(/<br(\s\/*)>/g, "").replace(/\s*/g, "");
    	return value.length > 0;
    }, "不能为空");

    /**
     * 文件类型校验
     */
    jQuery.validator.addMethod("extension", function(value, element, param) {
    	var result = false;
    	if (value) {
    		var lastIndex = value.lastIndexOf(".");
    		var extension = value.substr(lastIndex + 1, value.length);
    		if (extension) {
    			$.each(param, function(i, n) {
    				if (!result && n == extension) {
    					result = true;
    				}
    			});
    		}
    	}
    	return result;
    }, "文件类型不允许"); 
    // 多个邮箱
	jQuery.validator.addMethod("mutilEmail", function (value, element) {
	    var email = /^([\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+\,)*([\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+)$/;
	    return this.optional(element) || (email.test(value));
	}, "请输入正确的邮箱地址，多个邮箱之间以英文逗号隔开");
});

